#ifndef AUDIOOUTPUT_H
#define AUDIOOUTPUT_H
#include <string>




class AudioOutput{
  public:

    /**
     * @brief 构造函数
     * @param SampleRate 采样率
     * @param NumOfSampleBit 样本位宽
     */
    AudioOutput(int SampleRate = 44100,int NumOfSampleBit = 32);
    
    ~AudioOutput();

    /**
     * @brief 设置样本参数
     * @param SampleRate 采样率
     * @param NumOfSampleBit 样本位宽
     * @return 错误代码
     */
    int SetSampleParam(int SampleRate,int NumOfSampleBit);

    /**
     * @brief 设置缓存参数
     * @param BufferSize 缓存大小 单位:样本
     * @param BlockCount 缓存块数
     * @return 错误代码
     */
    int SetBuffer(int BufferSize,int BlockCount);

    /**
     * @brief 启动设备
     * @param WindowHandle 窗口句柄
     * @param ErrorCallback 错误回调 异步调用 音频线程出现问题时会被调用
     * @param v 用户句柄 ErrorCallback会传入的指针
     * @return 错误代码
     */
    int Open(void (*ErrorCallback)(void*,const char*),void* v);

    /**
     * @brief 关闭设备
     */
    void Close();

    /**
     * @brief 输入音频数据
     * @param Data 音频数据
     * @param Length 数据长度 单位:字节数
     * @return 无
     */
    void Input(void* Data,int Length);

  
  private:
    void* Thread;
    void* DeviceHandle;
    void* DeviceHandleLock;
    void* DestroyThread;

    int SampleRate;
    int NumOfSampleBit;
    int BufferSize;//缓存大小 单位样本数
    int BlockCount;

    void DestroyThreadUpDate();
    int TryOpen(void (*ErrorCallback)(void*,const char*),void* v);
};




#endif // AUDIOOUTPUT_H
